import axios from 'axios'
import { message, Modal } from 'ant-design-vue'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器 - 添加token
request.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器 - 统一处理响应
request.interceptors.response.use(
  (response) => {
    const { data } = response
    
    // 如果接口返回成功
    if (data.code === 200) {
      return data
    }
    
    // 如果是401未授权，弹出登录模态框
    if (data.code === 401) {
      handleUnauthorized()
      return Promise.reject(new Error(data.msg || '未授权访问'))
    }
    
    // 其他错误，显示错误消息
    message.error(data.msg || '请求失败')
    return Promise.reject(new Error(data.msg || '请求失败'))
  },
  (error) => {
    // 网络错误或其他错误
    if (error.response?.status === 401) {
      handleUnauthorized()
    } else {
      message.error(error.message || '网络错误')
    }
    return Promise.reject(error)
  }
)

// 处理未授权访问
const handleUnauthorized = () => {
  // 清除本地token
  localStorage.removeItem('token')
  localStorage.removeItem('userInfo')
  
  // 弹出登录模态框
  Modal.confirm({
    title: '登录提示',
    content: '您需要登录才能访问该功能',
    okText: '立即登录',
    cancelText: '取消',
    onOk: () => {
      // 这里可以跳转到登录页面或打开登录模态框
      window.location.hash = '#/login'
    }
  })
}

// 创建文件服务的axios实例
export const fileRequest = axios.create({
  baseURL: '/file-api',
  timeout: 30000, // 文件操作超时时间设长一点
  headers: {
    'Content-Type': 'application/json'
  }
})

// 文件请求拦截器
fileRequest.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 文件响应拦截器
fileRequest.interceptors.response.use(
  (response) => {
    const { data } = response
    
    if (data.code === 200) {
      return data
    }
    
    if (data.code === 401) {
      handleUnauthorized()
      return Promise.reject(new Error(data.msg || '未授权访问'))
    }
    
    message.error(data.msg || '请求失败')
    return Promise.reject(new Error(data.msg || '请求失败'))
  },
  (error) => {
    if (error.response?.status === 401) {
      handleUnauthorized()
    } else {
      message.error(error.message || '网络错误')
    }
    return Promise.reject(error)
  }
)

export default request
